iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 10
1
Security

應用程式弱點與它們的產地系列 第 10

[Day10]A8- Insecure Deserialization

  • 分享至 

  • xImage
  •  

我們想來弄個"瓶裝綜合果汁"在 500cc 的杯子裡
原料預計是 200cc 瓶裝甘蔗汁 + 300cc 的瓶裝蘋果汁做混合
但是…原裝甘蔗汁拿去冷凍忘記退冰了,是甘蔗冰塊!!!!!
結果,兩個混合的果汁,在 500cc 的杯子裝不下就滿出來了…
這樣你有抓到一點點反序列化的精神了嗎 XDDDD

弱點描述

預期序列化的內容為資料時,透過未檢核的內容,執行反序列化時卻將資料內容轉為指令執行,進而達到攻擊,導致遠端程式執行或是重播攻擊、注入攻擊和越權攻擊…

弱點利用

簡單說明越權存取應用:
https://ithelp.ithome.com.tw/upload/images/20190926/20103647NtMJkKftqN.png

https://ithelp.ithome.com.tw/upload/images/20190926/20103647VQh3Xin8Sa.png

弱點根源

本質在於物件注入(Objection Injection),反序列化攻擊的兩個要點:

  • 反序列化的內容可控制
  • 允許執行反序列化內的危險功能

其嚴重性取決於所注入的物件是否會造成危險功能,像說覆蓋既有物件進而執行非預期功能… 等等。

修補建議

  1. 白名單檢驗
    不要信任所有前端 User 可以輸入的資料,所以針對前端的來源,加上檢核即可。

  2. 停用部份系統功能
    雖然治標不治本,或許可以停用 JVM 執行外部命令 Runtime.exec …等等系統功能。

  3. 停用反序列化功能
    或是不用反序列化的功能了 XDDDD
    甲骨文計畫放棄Java物件序列化功能:https://www.ithome.com.tw/news/123511

  4. 加上異常處理記錄或警示
    反序列化異常時,將readObject()聲明為final並且拋出異常
    但可能不能解決反序列化的根源問題

    private final void readObject(ObjectInputStream in) throws java.io.IOException 
    { throw new java.io.IOException("Cannot be deserialized");
    }
    

另外,有前輩推薦一套好用的Java 反序列化漏洞檢測工具:ysoserial,該工具通過多種機制構造PoC,運用反射機制和動態代理機制,有興趣的話可以裝看看。//先說我沒裝 =v=|||

相關新聞

  • JAVA世界中不安全的反序列化風險:http://www.digicentre.com.tw/industry_detail.php?id=37
  • 臺灣鼎新電腦聲明:面臨Java反序列化漏洞有1,800家企業,已協助85%客戶連線修補漏洞
    https://www.ithome.com.tw/news/104695
  • 烏雲漏洞通報:https://shuimugan.com/bug/view?bug_no=163343

延伸閱讀

一篇文章带你深入理解漏洞之 PHP 反序列化漏洞
https://www.k0rz3n.com/2018/11/19/%E4%B8%80%E7%AF%87%E6%96%87%E7%AB%A0%E5%B8%A6%E4%BD%A0%E6%B7%B1%E5%85%A5%E7%90%86%E8%A7%A3PHP%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E6%BC%8F%E6%B4%9E/


上一篇
[Day09]A7-Cross-Site Scripting
下一篇
[Day11]A9 - Using Components with Known Vulnerabilities
系列文
應用程式弱點與它們的產地17
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言